package com.ruoyi.api.util;

import java.math.BigDecimal;

public class DistanceUtils {

	/**
     * 地球半径,单位 km
     */
    private static final double EARTH_RADIUS = 6378.137;

    /**
     * 根据经纬度，计算两点间的距离
     *
     * @param longitude1 第一个点的经度
     * @param latitude1  第一个点的纬度
     * @param longitude2 第二个点的经度
     * @param latitude2  第二个点的纬度
     * @return 返回距离 单位米
     */
    public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
        // 纬度
        double lat1 = Math.toRadians(latitude1);
        double lat2 = Math.toRadians(latitude2);
        // 经度
        double lng1 = Math.toRadians(longitude1);
        double lng2 = Math.toRadians(longitude2);
        // 纬度之差
        double a = lat1 - lat2;
        // 经度之差
        double b = lng1 - lng2;
        // 计算两点距离的公式
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
                Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
        // 弧长乘地球半径, 返回单位: 米
        s =  s * EARTH_RADIUS*1000;
        return s;
    }
    
    public static boolean isInSiteRange(String busLat, String busLon, String siteLat, String siteLon, int radius) {
    	double longitude1 = Double.valueOf(busLon.toString());
    	double latitude1 = Double.valueOf(busLat.toString());
    	double longitude2 = Double.valueOf(siteLon.toString());
    	double latitude2 = Double.valueOf(siteLat.toString());
    	double radius1 = radius;
    	double d = getDistance(longitude1, latitude1, longitude2, latitude2);
    	BigDecimal data1 = new BigDecimal(d);  
    	BigDecimal data2 = new BigDecimal(radius1);  
        boolean res = compare(data1, data2);
    	return res;
    }

    public static void main(String[] args) {
        double d = getDistance(116.489485, 40.0331972, 116.489487, 40.0332072);
        System.out.println(d);
        System.out.println(isInSiteRange("40.0331972", "116.489485", "40.0332072", "116.489487",  300));
    }
    
    public static boolean compare(BigDecimal val1, BigDecimal val2) {  
    	boolean result = true;  
        if (val1.compareTo(val2) > 0) {  
            result = false;  
        }  
        return result;  
    }  
}
